#include "bilibilivideo.h"

#include <httpclient.h>

BilibiliVideo::BilibiliVideo() {}

QString BilibiliVideo::name()
{
    return "Bilibili - 视频";
}

QList<QListWidgetItem *> BilibiliVideo::searching_item(const QString &text)
{
    QList<QListWidgetItem *> list;
    // 1. 使用 bilibili 搜索接口，来源 github
    Request req("https://api.bilibili.com/x/web-interface/search/type");
    req.addQuery("search_type", "video");

    // 2. 当没有搜索词的时候，默认 洛天依
    if (text.isEmpty()) {
        req.addQuery("keyword", "洛天依");
    } else {
        req.addQuery("keyword", text);
    }
    req.addQuery("page", "1");                      // 第1页(每次只能得到20条结果)
    req.setHeader("Cookie","SESSDATA=xxx");

    // 3. 得到第一页数据后，一次性追加3页的结果，预计共 80 条
    auto items = HttpClient::instance().get(req).data().toMap().value("result").toList();
    req.addQuery("page", "2");
    items << HttpClient::instance().get(req).data().toMap().value("result").toList();
    req.addQuery("page", "3");
    items << HttpClient::instance().get(req).data().toMap().value("result").toList();
    req.addQuery("page", "4");
    items << HttpClient::instance().get(req).data().toMap().value("result").toList();

    // 4. 根据数据的结果取内容
    foreach (auto item, items) {
        auto var = item.toMap();

        auto type = var.value("type").toString();
        if (type != "video") {
            continue;
        }
        auto id= var.value("id").toString();
        auto arcurl= var.value("arcurl").toString();
        auto title = var.value("title").toString();
        auto pubdate= var.value("pubdate").toInt();
        auto date = QDateTime::fromSecsSinceEpoch(pubdate);
        title.remove("<em class=\"keyword\">");
        title.remove("</em>");
        auto v = newItem();
        v->setText(date.toString("yyyy-MM-dd") +":"+ title);
        v->setData(990,arcurl);
        list << v;
    }
    return list;
}

QString BilibiliVideo::content_item(const QListWidgetItem *item)
{
    return item->data(990).toString();
}
